home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 32 / Amiga Format AFCD32 (Nov 1998, Issue 117).iso / -seriously_amiga- / programming / e / newgui / src / plugins / pl_dndexample.e < prev    next >
Text File  |  1998-08-10  |  4KB  |  111 lines

  1. OPT     OSVERSION = 37
  2. OPT     MODULE
  3.  
  4. MODULE  'graphics/rastport'
  5. MODULE  'graphics/text'
  6. MODULE  'intuition/intuition'
  7. MODULE  'newgui/newgui'
  8. MODULE  'newgui/ng_dnd_xchange'
  9. MODULE  'newgui/ng_performdnd'
  10. MODULE  'tools/ghost'
  11. MODULE  'tools/textlen'
  12.  
  13. EXPORT OBJECT  dndplug OF plugin
  14.  dnd_act:INT
  15.  minwidth:INT
  16.  minheight:INT
  17. ENDOBJECT
  18.  
  19. PROC min_size(ta,fh)                            OF dndplug      IS self.minwidth,self.minheight
  20.  
  21. PROC will_resize()                              OF dndplug      IS FALSE
  22.  
  23. PROC render(ta:PTR TO textattr,x,y,xs,ys,win:PTR TO window)     OF dndplug
  24.  DEF    len=0,
  25.         tex:textextent
  26.   IF (ta=NIL)                                                           -> Wenn der Aufruf von unserer eigenen Prozedur erfolgte!
  27.    ta:=self.gh.tattr
  28.    x:=self.x
  29.    y:=self.y
  30.    xs:=self.xs
  31.    ys:=self.ys
  32.    win:=self.gh.wnd
  33.   ENDIF
  34.    IF (self.dnd_image<>NIL) 
  35.     DrawImage(win.rport,self.dnd_image,x,y)                             -> Image rendern
  36.    ELSEIF (self.dnd_text<>NIL)
  37.     SetABPenDrMd(win.rport,1,0,RP_JAM2)
  38.      Move(win.rport,x,y+ta.ysize-3)
  39.       TextExtent(win.rport,self.dnd_text,self.dnd_textlen,tex)
  40.      len:=TextFit(win.rport,self.dnd_text,self.dnd_textlen,tex,NIL,1,xs,256)
  41.     Text(win.rport,self.dnd_text,len)
  42.    ENDIF
  43.   IF self.dis=TRUE THEN ghost(win,x,y,xs,ys)
  44. ENDPROC
  45.  
  46. PROC clear_render(win:PTR TO window)            OF dndplug               -> Unser Image löschen (z.B bei Window-Resizeing!
  47.  SetABPenDrMd(win.rport,0,0,RP_JAM1)
  48.   RectFill(win.rport,self.x,self.y,(self.x+self.xs),(self.y+self.ys))   -> Hintergrund löschen
  49. ENDPROC
  50.  
  51. PROC disable(bool)                              OF dndplug               -> Unser Plugin soll disabled werden!
  52.  DEF    len=0,
  53.         tex:PTR TO textextent
  54.   self.dis:=bool
  55.    IF self.dis=TRUE
  56.     ghost(self.gh.wnd,self.x,self.y,self.xs,self.ys)
  57.    ELSE
  58.     IF (self.dnd_image<>NIL)
  59.      DrawImage(self.gh.wnd.rport,self.dnd_image,self.x,self.y)
  60.     ELSE
  61.      SetABPenDrMd(self.gh.wnd.rport,1,0,RP_JAM2)
  62.       Move(self.gh.wnd.rport,self.x,self.y+self.gh.tattr.ysize-3)
  63.        TextExtent(self.gh.wnd.rport,self.dnd_text,self.dnd_textlen,tex)
  64.       len:=TextFit(self.gh.wnd.rport,self.dnd_text,self.dnd_textlen,tex,NIL,1,self.xs,256)
  65.      Text(self.gh.wnd.rport,self.dnd_text,len)
  66.     ENDIF
  67.    ENDIF
  68. ENDPROC
  69.  
  70. -> Drag 'N' Drop-Spezifische Prozeduren
  71. PROC dnd(type,img,selimg,minwidth,minheight,str,num,act,proc) OF dndplug
  72.  self.type:=type                                                        -> Der Typ der Box (Dragbox, dropbox, drag&drop-box) MUß IMMER gesetzt werden!
  73.   self.dnd_info:=DND_INFO_NODATA                                        -> Standarttyp setzen
  74.    IF (img<>NIL)                                                        -> Wenn ein Image übergeben wurde
  75.     self.dnd_image:=img                                                 -> Dieses ins Plugin speichern
  76.      self.dnd_info:=DND_INFO_IMAGE                                      -> Zeigt an, daß wir ein Image zum Anzeigen haben!
  77.     IF (selimg<>NIL)
  78.      self.dnd_selectimage:=selimg
  79.     ELSE
  80.      self.dnd_selectimage:=img
  81.     ENDIF
  82.    ENDIF
  83.     IF (str<>NIL)                                                       -> Wenn ein String/Text angegeben wurde
  84.      self.dnd_text:=str                                                 -> Diesen Speichern
  85.       self.dnd_info:=self.dnd_info + DND_INFO_TEXT                      -> Und zur Info hinzufügen, daß ein String verfügbar ist!
  86.      self.dnd_textlen:=StrLen(str)
  87.     ENDIF
  88.       self.dnd_num:=num
  89.      self.dnd_proc:=proc
  90.     self.dnd_act:=act
  91.    self.minwidth:=minwidth
  92.   self.minheight:=minheight
  93. ENDPROC
  94.  
  95. PROC dnd_xchange(plug,called)      OF dndplug
  96.  DEF    action
  97.   action:=ng_dnd_xchange(self,called,self.dnd_act)
  98.    IF called=FALSE
  99.      ng_setattrsA([
  100.         NG_GUI,         self.gh,
  101.         NG_REDRAW,      self,
  102.         NIL,            NIL])
  103.      ng_setattrsA([
  104.         NG_GUI,         self.gh,
  105.         NG_REDRAW,      self.dnd_dest,
  106.         NIL,            NIL])
  107.    ENDIF
  108. ENDPROC action
  109.  
  110. PROC  performdnd(win:PTR TO window)     OF dndplug       IS ng_performdnd(win,self)
  111.